package com.atguigu.test.scope;

import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;

/**
 * @author zp
 * @version 1.0
 * @description: 自定义的注入对象
 * singleton	每个 Spring 容器一个实例（默认值）
 * prototype	允许 bean 可以被多次实例化（使用一次就创建一个实例）
 * request	定义 bean 的 scope 是 HTTP 请求。每个 HTTP 请求都有自己的实例。只有在使用有 Web 能力的 Spring 上下文时才有效
 * session	定义 bean 的 scope 是 HTTP 会话。只有在使用有 Web 能力的 Spring ApplicationContext 才有效
 * application	定义了每个 ServletContext 一个实例
 * websocket	定义了每个 WebSocket 一个实例。只有在使用有 Web 能力的 Spring ApplicationContext 才有效
 * @date 2022/12/18 18:32
 */
public class MyScope {
    private MyScopeBean myScopeBean;

    private ObjectFactory<MyScopeBean> myScopeBeanObject;

    public MyScopeBean getMyScopeBean() {
        return myScopeBean;
    }

    @Autowired
    @Lazy
    public void setMyScopeBean(MyScopeBean myScopeBean) {
        this.myScopeBean = myScopeBean;
    }

    public MyScopeBean getMyScopeBeanObject() {
        return myScopeBeanObject.getObject();
    }
    @Autowired
    public void setMyScopeBeanObject(ObjectFactory<MyScopeBean> myScopeBeanObject) {
        this.myScopeBeanObject = myScopeBeanObject;
    }
}
